<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="W4JZj" id="W4JZj"><span data-lake-id="u5a528606" id="u5a528606">典型回答</span></h1>
  <p data-lake-id="u52d0c895" id="u52d0c895"><br></p>
  <ol list="ucb5d8e53">
   <li fid="uafabd5cc" data-lake-id="uce1e94df" id="uce1e94df"><strong><span data-lake-id="u44e87ce9" id="u44e87ce9">性能</span></strong><span data-lake-id="ufc3a618e" id="ufc3a618e">：MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能：读/写工作负载、IO 密集型工作负载、以及高竞争（"hot spot"热点竞争问题）工作负载。</span></li>
   <li fid="uafabd5cc" data-lake-id="u54ba722e" id="u54ba722e"><strong><span data-lake-id="u761a8bac" id="u761a8bac">NoSQL</span></strong><span data-lake-id="u87a682c1" id="u87a682c1">：MySQL 从 5.7 版本开始提供 NoSQL 存储功能，目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求，而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。</span></li>
   <li fid="uafabd5cc" data-lake-id="uc2b3d825" id="uc2b3d825"><strong><span data-lake-id="u1b49c430" id="u1b49c430">窗口函数</span></strong><span data-lake-id="uf320af84" id="uf320af84">(Window Functions)：从 MySQL 8.0 开始，新增了一个叫窗口函数的概念，它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似，但它不会将多行查询结果合并为一行，而是将结果放回多行当中。即窗口函数不需要 GROUP BY。</span></li>
   <li fid="uafabd5cc" data-lake-id="u9ef22b2f" id="u9ef22b2f"><strong><span data-lake-id="uf40a0516" id="uf40a0516">隐藏索引</span></strong><span data-lake-id="uc902c93f" id="uc902c93f">：在 MySQL 8.0 中，索引可以被“隐藏”和“显示”。当对索引进行隐藏时，它不会被查询优化器所使用。我们可以使用这个特性用于性能调试，例如我们先隐藏一个索引，然后观察其对数据库的影响。如果数据库性能有所下降，说明这个索引是有用的，然后将其“恢复显示”即可；如果数据库性能看不出变化，说明这个索引是多余的，可以考虑删掉。</span></li>
   <li fid="uafabd5cc" data-lake-id="u974b7563" id="u974b7563"><strong><span data-lake-id="u7704f82e" id="u7704f82e">取消查询缓存</span></strong><span data-lake-id="uf075da8c" id="uf075da8c">：MySQL 8.0 出于性能和可维护性方面的考虑取消了查询缓存，通过使用索引、更好的查询计划优化、以及缓存结果集而不是整个查询。这些方法更有效地提高了查询性能，同时避免了查询缓存可能引入的问题。</span></li>
   <li fid="uafabd5cc" data-lake-id="uc62534f5" id="uc62534f5"><strong><span data-lake-id="u68c143f3" id="u68c143f3">select for update支持no wait</span></strong><span data-lake-id="u4c9282c6" id="u4c9282c6">：如果另一个事务已经锁定了一些行，当前事务将等待直到那些锁被释放。加上 NOWAIT 关键字后，如果尝试锁定的行已经被其他事务锁定，数据库将立即抛出一个错误，而不是等待。</span></li>
   <li fid="uafabd5cc" data-lake-id="u87caa0ff" id="u87caa0ff"><span data-lake-id="u99c04716" id="u99c04716">降序索引：MySQL 8.0 为索引提供按降序方式进行排序的支持，在这种索引中的值也会按降序的方式进行排序。</span></li>
   <li fid="uafabd5cc" data-lake-id="u881e591d" id="u881e591d"><span data-lake-id="uc280ecd8" id="uc280ecd8">通用表表达式(Common Table Expressions CTE)：在复杂的查询中使用嵌入式表时，使用 CTE 使得查询语句更清晰。</span></li>
   <li fid="uafabd5cc" data-lake-id="ua9b5de76" id="ua9b5de76"><span data-lake-id="u2560d520" id="u2560d520">UTF-8 编码：从 MySQL 8 开始，使用 utf8mb4 作为 MySQL 的默认字符集。</span></li>
   <li fid="uafabd5cc" data-lake-id="u9e7c7e12" id="u9e7c7e12"><span data-lake-id="uc57a5cd3" id="uc57a5cd3">JSON：MySQL 8 大幅改进了对 JSON 的支持，添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数，以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。</span></li>
   <li fid="uafabd5cc" data-lake-id="u94f59962" id="u94f59962"><span data-lake-id="uc3260cc3" id="uc3260cc3">可靠性：InnoDB 现在支持表 DDL 的原子性，也就是 InnoDB 表上的 DDL 也可以实现事务完整性，要么失败回滚，要么成功提交，不至于出现 DDL 时部分成功的问题，此外还支持 crash-safe 特性，元数据存储在单个事务数据字典中。</span></li>
   <li fid="uafabd5cc" data-lake-id="ub8a6870c" id="ub8a6870c"><span data-lake-id="u158c876d" id="u158c876d">高可用性(High Availability)：InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。</span></li>
   <li fid="uafabd5cc" data-lake-id="u0fa562d1" id="u0fa562d1"><span data-lake-id="u217ba78d" id="u217ba78d">安全性：对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权。</span></li>
  </ol>
  <p data-lake-id="uc6a3341b" id="uc6a3341b"><span data-lake-id="ue2352df4" id="ue2352df4">详见： </span><a href="https://dev.mysql.com/blog-archive/whats-new-in-mysql-8-0-generally-available/" target="_blank" data-lake-id="u5fd32943" id="u5fd32943"><span data-lake-id="u4d4c19a5" id="u4d4c19a5">https://dev.mysql.com/blog-archive/whats-new-in-mysql-8-0-generally-available/</span></a></p>
 </body>
</html>